package com.erli.exchange.common.context;

import org.springframework.stereotype.Component;

import com.erli.exchange.core.util.RequestUtil;
import com.erli.exchange.core.util.ResponseUtil;

import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.servlet.ServletUtil;

/**
 * 
 * @Package com.erli.exchange.common.context   
 * @ClassName:  CookieManager   
 * @Description:TODO
 * @Author: LeeHo
 * @Date:   2019年3月16日 下午11:14:35   
 *
 */
@Component
public class CookieManager {

	private final String COOKIE_NAME_SUFFIX_USERID = "_USERID";

	private final String COOKIE_NAME_SUFFIX_LOGIN_TOKEN = "LOGIN_TOKEN";

	/**
	 * @Title: getCookieKeyPrefix   
	 * @Description: cookie名前缀
	 * @Author: LeeHo
	 * @Date:   2019年3月16日 下午11:18:40      
	 * @param: @return      
	 * @return: String  
	 * @throws
	 */
	private String getCookieKeyPrefix() {
		return RequestUtil.getServerDomain();
	}

	/**
	 * 
	 * @Title: getUserId   
	 * @Description: 从Cookie信息中读取用户ID
	 * @Author: LeeHo
	 * @Date:   2019年3月16日 下午11:13:41      
	 * @param: @return      
	 * @return: int  
	 * @throws
	 */
	public Integer getUserId() {
		String value = ServletUtil
				.getCookie(RequestUtil.httpServletRequest(), getCookieKeyPrefix().concat(COOKIE_NAME_SUFFIX_USERID))
				.getValue();
		if (StrUtil.isEmpty(value)) {
			return 0;
		}
		if (!NumberUtil.isNumber(value)) {
			return 0;
		}
		return Integer.parseInt(value);
	}

	/**
	 * 
	 * @Title: setUserId   
	 * @Description: 放置用户ID到Cookie中
	 * @Author: LeeHo
	 * @Date:   2019年3月16日 下午11:07:16      
	 * @param: @param userId      
	 * @return: void  
	 * @throws
	 */
	public void setUserId(int userId) {
		ServletUtil.addCookie(ResponseUtil.httpServletResponse(), getCookieKeyPrefix().concat(COOKIE_NAME_SUFFIX_USERID),
				String.valueOf(userId), -1);
	}

	/**
	 * 
	 * @Title: getLoginToken   
	 * @Description: 从Cookie信息中读取Token
	 * @Author: LeeHo
	 * @Date:   2019年3月16日 下午11:09:32      
	 * @param: @return      
	 * @return: String  
	 * @throws
	 */
	public String getLoginToken() {
		return ServletUtil
				.getCookie(RequestUtil.httpServletRequest(), getCookieKeyPrefix().concat(COOKIE_NAME_SUFFIX_LOGIN_TOKEN))
				.getValue();
	}

	/**
	 * 
	 * @Title: setLoginToken   
	 * @Description: 将Token放置到Cookie中
	 * @Author: LeeHo
	 * @Date:   2019年3月16日 下午11:10:18      
	 * @param: @param loginToken      
	 * @return: void  
	 * @throws
	 */
	public void setLoginToken(String loginToken) {
		ServletUtil.addCookie(ResponseUtil.httpServletResponse(),
				getCookieKeyPrefix().concat(COOKIE_NAME_SUFFIX_LOGIN_TOKEN), loginToken, -1);
	}

}
